package com.dylan.历史.java8.lambda表达式;

import org.junit.Test;

import java.awt.*;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.function.IntFunction;
import java.util.stream.Collectors;

/**
 * Created by Dylan on 2018/7/17.
 */
public class 构造器引用 {

    @Test
    public void test1() {
        // 上下文推断,Button类会使用带String类型参数的构造器
        List<Button> list1 = Arrays.asList("按钮1", "按钮2").stream().map(Button::new).collect(Collectors.toList());

        // 上下文推断,会使用Date类的无参构造
        Thread t1 = new Thread(Date::new);

        // 数组类型构造器引用
        IntFunction<int[]> intFunction1 = x -> new int[x];
        IntFunction<int[]> intFunction2 = int[]::new;

        // 使用Stream中的toArray()转成数组
        Button[] arr1 = Arrays.asList("按钮1", "按钮2").stream().map(Button::new).toArray(Button[]::new);
        Button[] arr2 = Arrays.asList("按钮1", "按钮2").stream().map(Button::new).toArray(new IntFunction<Button[]>() {
            @Override
            public Button[] apply(int value) {
                return new Button[value];
            }
        });
    }
}
